package 第6次作业;

// 代码 5-4 委托处理除0异常（有finally处理）
public class TestThrows {
    // 委托调用方法处理异常：声明抛出ArithmeticException
    public static void computer() throws ArithmeticException {
        // Math.random()返回[0,1)，因此(1+Math.random())×2 的范围是 [2, 4)
        // 强转int后，x的可能值：2、3（因为2≤值<4，强转后舍弃小数部分）
        int x = (int) ((1 + Math.random()) * 2);
        // y的可能值：0或1（Math.random()×2返回[0,2)，强转后0或1）
        int y = (int) (Math.random() * 2);
        int result = x / y;
        System.out.println("the result is:" + result);
    }

    // 异常处理逻辑：打印异常信息
    public static void exp(ArithmeticException e) {
        System.out.println("ArithmeticException类的对象出现");
        e.printStackTrace();
    }

    public static void main(String[] args) {
        System.out.println("程序开始执行");
        try {
            // 尝试调用可能抛出异常的方法
            computer();
        } catch (ArithmeticException e) {
            // 捕获computer()抛出的ArithmeticException（仅当y=0时触发）
            exp(e);
        } finally {
            // 无论try块是否抛出异常、catch块是否执行，finally块都会执行
            System.out.println("finally块执行：资源清理/收尾操作（例如关闭文件、释放连接等）");
        }
        System.out.println("程序结束执行");
    }
}